<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<![endif]-->
<title>VIM 中文帮助: 图形用户界面 (GUI)</title>
<link rel="stylesheet" href="vim-stylesheet.css" type="text/css" />
<link rel="canonical" href="https://yianwillis.github.io/vimcdoc/doc/gui.html" />
<script type="text/javascript" src="vimcdoc.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<body>
<nav id=banner>
<form action=tags.html target="tag_iframe">
  <input type="text" name="tag" id="tag" placeholder="标签搜索">
</form>
<iframe name="tag_iframe" src=""></iframe>
<a href="help.html">帮助总览</a> &middot;
<hr/>
<a href="quickref.html">快速参考</a> &middot;
<a href="index.html">命令索引</a> &middot;
<a href="eval.html#functions">函数列表</a> &middot;
<a href="quickref.html#option-list">选项列表</a> &middot;
<hr/>
<a href="usr_toc.html">用户手册</a> &middot;
<a href="help.html#reference_toc">参考手册</a> &middot;
</nav>

<header>
<h2>gui</h2>
</header>
<article id=outer>
<section class=inner>
<b class="vimtag"> <a name="gui.txt">gui.txt</a> </b>       适用于 Vim 9.0 版本。   最近更新: 2023年2月


                  <code class="vim">VIM 参考手册    by Bram Moolenaar</code>
                                <code class="vim">译者</code>: Willis


Vim 的图形用户界面                                      <b class="vimtag"> <a name="gui">gui</a> </b> <b class="vimtag"> <a name="GUI">GUI</a> </b>

1. 启动 GUI                      <a href="gui.html#gui-start">gui-start</a> 
2. 滚动条                        <a href="gui.html#gui-scrollbars">gui-scrollbars</a> 
3. 鼠标控制                      <a href="gui.html#gui-mouse">gui-mouse</a> 
4. 使用 GUI 进行选择             <a href="gui.html#gui-selections">gui-selections</a> 
5. 菜单                          <a href="gui.html#menus">menus</a> 
6. 字体                          <a href="gui.html#gui-font">gui-font</a> 
7. 附加                          <a href="gui.html#gui-extras">gui-extras</a> 
8. 外壳命令                      <a href="gui.html#gui-shell">gui-shell</a> 

其它的 GUI 文档:
 <a href="gui_x11.html#gui_x11.txt">gui_x11.txt</a>    关于 X11 GUI 的特定内容。
 <a href="gui_w32.html#gui_w32.txt">gui_w32.txt</a>    关于 Win32 GUI 的特定内容。


</section><hr class="doubleline" /><section class=inner>
<h4>1. 启动 GUI                                     <b class="vimtag"> <a name="gui-start">gui-start</a> </b> <b class="vimtag"> <a name="E229">E229</a> </b> <b class="vimtag"> <a name="E233">E233</a> </b></h4>
首先，需要确定你确实有包含 GUI 代码的 Vim 版本。你可以用 ":version" 命令检查这
一点。它应该输出 "with xxx GUI"，而 "xxx" 是 X11-Motif、Photon、GTK2、GTK3
等，或者 "MS-Windows 32 bit GUI version"。

如何启动 GUI 决定于你的系统。多数情况下，你可以这样启动 Vim 的 GUI 版本:
    gvim <code class="special">[options]</code> [files...]

GUI 和非 GUI 版本在 Vim 的 X11 版本上都可以运行。见  <a href="gui_x11.html#gui-x11-start">gui-x11-start</a> 。

                        <b class="vimtag"> <a name="gui-init">gui-init</a> </b> <b class="vimtag"> <a name="gvimrc">gvimrc</a> </b> <b class="vimtag"> <a name=".gvimrc">.gvimrc</a> </b> <b class="vimtag"> <a name="_gvimrc">_gvimrc</a> </b> <b class="vimtag"> <a name="$MYGVIMRC">$MYGVIMRC</a> </b>
gvimrc 文件是 GUI 专用的启动命令应该放置的地方。它总在  <a href="starting.html#vimrc">vimrc</a>  文件之后执行。
如果你有此文件，$MYGVIMRC 环境变量会保存其文件名。

GUI 启动时，开展以下初始化操作 (按照给出的顺序):
- <a href="options.html#'term'">'term'</a> 选项设为 "builtin_gui"，复位终端选项到其 GUI 的缺省值
   <a href="term.html#terminal-options">terminal-options</a> 。
- 如果存在系统菜单文件，执行之。该文件名通常是 "$VIMRUNTIME/menu.vim"，可用
  ":version" 检查。另见  <a href="starting.html#$VIMRUNTIME">$VIMRUNTIME</a> 。要跳过菜单载入，在 <a href="options.html#'guioptions'">'guioptions'</a> 里加入
  'M'。                                 <b class="vimtag"> <a name="buffers-menu">buffers-menu</a> </b> <b class="vimtag"> <a name="no_buffers_menu">no_buffers_menu</a> </b>
  系统菜单文件包含 "Buffers" 菜单。如果不需要，在 .vimrc (不是 .gvimrc！) 里，
  置位 "no_buffers_menu" 变量: 
<code class="example">        :let no_buffers_menu = 1</code>
  <code class="note">备注</code>: 打开语法高亮也会载入菜单文件，因此 Buffers 菜单的屏蔽须在 ":syntax on"
  之前。菜单上路径名被截短到 35 个字符。你可以这样截短它们到其它长度，如 50:
        :let bmenu_max_pathlen = 50
- 启动 Vim 时如果用了 "-U <code class="special">{gvimrc}</code>" 命令行选项，初始化过程会读入该 <code class="special">{gvimrc}</code> 文
  件并跳过以下步骤。如果 <code class="special">{gvimrc}</code> 为 "NONE"，初始化过程不读入任何文件。
- 对 Unix 和 MS-Windows 而言，如果系统 gvimrc 存在，执行之。该文件的名字通常是
  "$VIM/gvimrc"，可用 ":version" 检查。另见  <a href="starting.html#$VIM">$VIM</a> 。
- 尝试以下位置，只使用其中第一个可用的:
  - GVIMINIT 环境变量存在而且非空时，把它作为 Ex 命令执行之。
  - 用户 gvimrc 文件存在时，执行之。该文件的名字通常是 "$HOME/.gvimrc"，可用
    ":version" 检查。
  - 对 Win32 而言，必要时 Vim 会设置 $HOME，见  <a href="options.html#$HOME-windows">$HOME-windows</a> 。
  - 如果没找到 "_gvimrc" 文件，尝试 ".gvimrc"。反之亦然。
  保存第一个找到的文件名到 $MYGVIMRC，除非已经被设置。
- 如果置位 <a href="options.html#'exrc'">'exrc'</a> 选项 (缺省 <code class="emphasis">并非</code> 如此)，执行文件 ./.gvimrc。如果该文件不属于
  你，会有一些安全的限制。如果没找到 ".gvimrc"，尝试 "_gvimrc"。Macintosh 和
  DOS/Win32 环境会先尝试 "_gvimrc"。

<code class="note">注意</code>: 如果 Vim 启动时使用 "-u NONE" 或 "-u DEFAULTS" 而且没有给出 "-U" 参数，
或者使用 "-U NONE"，则除了第一步以外，都不执行。

以上这些，都在通用 Vim 初始化，比如读取 .vimrc 文件，的步骤之 <code class="emphasis">后</code> 执行。参见
 <a href="starting.html#initialization">initialization</a> 。
但 GUI 窗口只有在全部初始化执行完毕后才会打开。如果你希望在打开 GUI 窗口后执行
某些命令，使用  <a href="autocmd.html#GUIEnter">GUIEnter</a>  自动事件。例如: 
<code class="example">        :autocmd GUIEnter * winpos 100 50</code>
<code class="example"></code>
可用 gvimrc 文件设置定制菜单 (见  <a href="gui.html#:menu">:menu</a> )，并初始化其它和终端版本不同的个人设
置。

建议你把自己的 GUI 初始化部分放在:
        Unix                $HOME/.gvimrc 或 $HOME/.vim/gvimrc
        Win32               $HOME/_gvimrc、$HOME/vimfiles/gvimrc 或
                            $VIM/_gvimrc
        Amiga               s:.gvimrc、home:.gvimrc、home:vimfiles:gvimrc 或
                            $VIM/.gvimrc
        Haiku               $HOME/config/settings/vim/gvimrc

个人化初始文件会按上述的顺序依次找寻，且只读入其中第一个找到的文件。

若干选项只有在 GUI 版本的 Vim 里才有意义。它们是 <a href="options.html#'guicursor'">'guicursor'</a>、<a href="options.html#'guifont'">'guifont'</a>、
<a href="options.html#'guipty'">'guipty'</a> 和 <a href="options.html#'guioptions'">'guioptions'</a>。和其它选项一样，文档可见  <a href="options.html#options.txt">options.txt</a> 。

如果使用 Motif 版本的 GUI (不适用于 GTK+ 或 Win32 版本)，可以使用若干 X 资源。
见  <a href="gui_x11.html#gui-resources">gui-resources</a> 。

另外一个在不同场合下设置颜色的方法是使用高亮组。"Normal" 组用来设置背景和前景
色。示例 (看上去很悦目): 
<code class="example"></code>
<code class="example">        :highlight Normal guibg=grey90</code>
<code class="example"></code>
"guibg" 和 "guifg" 设置覆盖正常的背景和前景设置。其它 Normal 高亮组的设置都没
有用到。使用 "guifont" 选项设置字体。

要设置在不同模式下的光标颜色，也请查看 <a href="options.html#'guicursor'">'guicursor'</a> 选项。

启动时 Vim 试图使窗口在屏幕上的大小合适，以免部分内容不可见。在 X 窗口系统下，
这需要一些推测。你可以用 <a href="options.html#'guiheadroom'">'guiheadroom'</a> 选项来改变窗口标题和任务栏的高度。

                                                <b class="vimtag"> <a name=":winp">:winp</a> </b> <b class="vimtag"> <a name=":winpos">:winpos</a> </b> <b class="vimtag"> <a name="E188">E188</a> </b>
:winp[os]
                显示 GUI vim 窗口以像素计的当前左上角位置。并非在所有系统上都
                可以。
                另见  <a href="builtin.html#getwinpos()">getwinpos()</a> 、 <a href="builtin.html#getwinposx()">getwinposx()</a>  和  <a href="builtin.html#getwinposy()">getwinposy()</a> 。

:winp[os] <code class="special">{X}</code> <code class="special">{Y}</code>                                                       <b class="vimtag"> <a name="E466">E466</a> </b>
                把 GUI vim 窗口放在给定 <code class="special">{X}</code> 和 <code class="special">{Y}</code> 坐标。坐标应指定以像素计的
                窗口左上角的位置。并非在所有系统上都可以。
                可以在 (新版的) xterm 里使用  <a href="syntax.html#xterm-color">xterm-color</a> 。
                如果 GUI 窗口还没有打开，坐标值被记住，直到窗口打开为止。该位
                置会被调整，使得窗口在屏幕上大小合适 (如果可能)。

                                                    <b class="vimtag"> <a name=":win">:win</a> </b> <b class="vimtag"> <a name=":winsize">:winsize</a> </b> <b class="vimtag"> <a name="E465">E465</a> </b>
:win[size] <code class="special">{width}</code> <code class="special">{height}</code>
                设置窗口高度为 <code class="special">{width}</code> 宽 <code class="special">{height}</code> 高，以字符计。
                建议使用 ":set lines=11 columns=22" 来代替，因为容易理解这些数
                值的意义。
                如果你得到比期待中少的行数，检查 <a href="options.html#'guiheadroom'">'guiheadroom'</a> 选项。

如果你运行 X 窗口系统，你可以这样得到关于 Vim 运行所在的窗口的信息: 
<code class="example">        :!xwininfo -id $WINDOWID</code>
<code class="example">        :!xprop -id $WINDOWID</code>
<code class="example">        :execute '!xwininfo -id ' .. v:windowid</code>
<code class="example">        :execute '!xprop -id ' .. v:windowid</code>

                                                        <b class="vimtag"> <a name="gui-IME">gui-IME</a> </b> <b class="vimtag"> <a name="iBus">iBus</a> </b>
在 X 里依赖于 XIM 框架输入国际字符的输入法，尤其是 iBus，已知会给 gvim 带来一
些不良效果。包括不能输入空格，输入字符间有长时间的延迟，或者输入的字符不能为
应用所识别等。

一个可行的解决方法，虽然不知什么原因，是启动时用  <a href="starting.html#-f">-f</a>  参数，不让 gvim 进入后台
执行。

</section><hr class="doubleline" /><section class=inner>
<h4>2. 滚动条                                               <b class="vimtag"> <a name="gui-scrollbars">gui-scrollbars</a> </b></h4>
系统有若干垂直滚动条和一个水平滚动条。你可以用 <a href="options.html#'guioptions'">'guioptions'</a> 选项设置会出现哪一
个。

界面看起来是这样 (使用 ":set guioptions=mlrb" 的情形下):

                       +------------------------------+ `
                       | File  Edit              Help | &lt;- 菜单栏 (m) `
                       +-+--------------------------+-+ `
                        <a href="motion.html#^">^</a>                            <a href="motion.html#^">^</a>  `
                        <a href="pattern.html#%23">#</a>  文本区域                  <a href="pattern.html#%23">#</a>  `
                       | |                          | | `
                        <a href="visual.html#v">v</a> __________________________ <a href="visual.html#v">v</a>  `
 Vim 窗口间的       -&gt; |-+ File.c              5,2  +-| `
 普通状态行             <a href="motion.html#^">^</a> """""""""""""""""""""""""" <a href="motion.html#^">^</a>  `
                       | |                          | | `
                       | | 另一个文件缓冲区。       | | `
                       | |                          | | `
                        <a href="pattern.html#%23">#</a>                            <a href="pattern.html#%23">#</a>  `
 左滚动条 (l)       -&gt;  <a href="pattern.html#%23">#</a>                            <a href="pattern.html#%23">#</a>  &lt;- 右滚动条  (r) `
                        <a href="pattern.html#%23">#</a>                            <a href="pattern.html#%23">#</a>  `
                       | |                          | | `
                        <a href="visual.html#v">v</a>                            <a href="visual.html#v">v</a>  `
                       +-+--------------------------+-+ `
                       | |&lt; ####                   &gt;| | &lt;- 底部滚动条  (b) `
                       +-+--------------------------+-+ `

任何滚动条或者菜单都可以关闭，只要在 <a href="options.html#'guioptions'">'guioptions'</a> 字符串里没有相应的字母就行
了。底部滚动条只有在置位 <a href="options.html#'nowrap'">'nowrap'</a> 时才有用。


垂 直 滚 动 条                                          <b class="vimtag"> <a name="gui-vert-scroll">gui-vert-scroll</a> </b>

每个 Vim 窗口都有紧挨着的滚动条，可以上下滚动来实现缓冲区内文本的位置移动。滚
动条拇指 (thumb) 指示缓冲区可见的部分。如果滚动条被一直往下拖动，最后文件的末
行会出现在窗口的顶部。

如果窗口被缩小到零高度 (因为另一个窗口的增大)，其滚动条消失。在窗口恢复时才重
新出现。

如果窗口被垂直分割，该窗口会在成为当前窗口时得到滚动条。想象当前窗口的正中间有
一条贯穿窗口的垂直线。如果两边都有滚动条，而当前窗口的中间线属于左半边，那么
右面的滚动条列包含当前窗口右边各窗口的滚动条。另外一侧也是如此。

水 平 滚 动 条                                          <b class="vimtag"> <a name="gui-horiz-scroll">gui-horiz-scroll</a> </b>

水平滚动条 (出现在 Vim GUI 的底部) 可以在 <a href="options.html#'wrap'">'wrap'</a> 选项关闭时用来水平滚动文本。
滚动条拇指的大小设置会使得最长可见行的文本可以最大限度的左右滚动。光标在有必要
时才会移动，使得它总保持在一个可视的字符上 (除非置位了 <a href="options.html#'virtualedit'">'virtualedit'</a>)。

计算最长可见行的长度需要若干计算，而且每次有改变的时候对需要进行。如果这需要太
多时间，或者你不希望光标跳到别的行上，在 <a href="options.html#'guioptions'">'guioptions'</a> 里包含 'h' 标志位。这
样，滚动限于当前光标所在文本行上。

                                                        <b class="vimtag"> <a name="motif-intellimouse">motif-intellimouse</a> </b>
如果你有 Intellimouse 鼠标并且 X 服务器支持滚轮，那你就可以用滚轮在 gvim 里上
下滚动文本。XFree86 4.0 和以后的版本都没有问题，一些老的版本里你需要加上补丁。
见  <a href="scroll.html#scroll-mouse-wheel">scroll-mouse-wheel</a> 。

对较老的 XFree86 版本你需要给 X 服务器打上补丁。以下页面有关于 Linux 上使用
Intellimouse 的一点信息，还有补丁和 X 服务器可执行文件的链接 (后者也许不一定有
你需要的):
    <a href="http://www.inria.fr/koala/colas/mouse-wheel-scroll/">http://www.inria.fr/koala/colas/mouse-wheel-scroll/</a>

</section><hr class="doubleline" /><section class=inner>
<h4>3. 鼠标控制                                             <b class="vimtag"> <a name="gui-mouse">gui-mouse</a> </b></h4>
鼠标只有在 <a href="options.html#'mouse'">'mouse'</a> 选项设置合适的标志位时才会工作。如果打开了 GUI 的时候还没有
设置 <a href="options.html#'mouse'">'mouse'</a>，<a href="options.html#'mouse'">'mouse'</a> 选项会自动设为 "a"，使得它除了在  <a href="message.html#hit-enter">hit-enter</a>  提示以外的
所有的模式下都能使用。如果你不希望这样，修改 <a href="options.html#'mouse'">'mouse'</a> 选项的一个好地方是在
"gvimrc" 文件里。

其它相关的选项:
<a href="options.html#'mousefocus'">'mousefocus'</a>    窗口焦点随鼠标指针改变  <a href="gui.html#gui-mouse-focus">gui-mouse-focus</a> 
<a href="options.html#'mousemodel'">'mousemodel'</a>    哪个鼠标按钮执行什么动作
<a href="options.html#'mousehide'">'mousehide'</a>     输入文本时隐藏鼠标指针
<a href="options.html#'mousemoveevent'">'mousemoveevent'</a> 允许鼠标移动事件，这样就可用 <code class="special">&lt;MouseMove&gt;</code> 映射
<a href="options.html#'selectmode'">'selectmode'</a>    开始选择模式还是可视模式

一个设置这些选项的快速方法是使用 ":behave" 命令。
                                                        <b class="vimtag"> <a name=":behave">:behave</a> </b> <b class="vimtag"> <a name=":be">:be</a> </b>
:be[have] <code class="special">{model}</code>       设置鼠标和选择的行为。可接受的参数是:
                           mswin        MS-Windows 行为
                           xterm        Xterm 行为

                        ":behave" 的使用改变了以下选项:
<code class="section">                        选项            mswin                   xterm   </code>
                        <a href="options.html#'selectmode'">'selectmode'</a>    "mouse,key"             ""
                        <a href="options.html#'mousemodel'">'mousemodel'</a>    "popup"                 "extend"
                        <a href="options.html#'keymodel'">'keymodel'</a>      "startsel,stopsel"      ""
                        <a href="options.html#'selection'">'selection'</a>     "exclusive"             "inclusive"

在 $VIMRUNTIME 目录下，有一个脚本叫  <a href="gui_w32.html#mswin.vim">mswin.vim</a> 。它会定义一些 MS-Windows 的剪
切/复制/粘贴的键盘映射，但这是 <code class="emphasis">不</code> 兼容的，因为它使用了 <code class="keystroke">CTRL-V</code>、 <code class="keystroke">CTRL-X</code> 和
<code class="keystroke">CTRL-C</code> 键。不过如果你不在意，使用这个命令: 
<code class="example">        :so $VIMRUNTIME/mswin.vim</code>
<code class="example"></code>
关于使用鼠标滚轮进行滚动的部分，见  <a href="scroll.html#scroll-mouse-wheel">scroll-mouse-wheel</a> 。


3.1 使用鼠标移动光标                                    <b class="vimtag"> <a name="gui-mouse-move">gui-mouse-move</a> </b>

在文本缓冲区某处点击鼠标左键，就会移动光标到那里！
<code class="section">在此模式下工作      当 <a href="options.html#'mouse'">'mouse'</a> 包含...时 </code>
普通模式            'n' 或 'a'
可视模式            'v' 或 'a'
插入模式            'i' 或 'a'

选择模式和可视模式一样处理。

你可以和操作符一起使用这个功能，比如 'd' 删除从当前光标位置到你用鼠标指向的位
置。即，按 'd'，然后在某处点击鼠标。

                                                        <b class="vimtag"> <a name="gui-mouse-focus">gui-mouse-focus</a> </b>
可以置位 <a href="options.html#'mousefocus'">'mousefocus'</a> 选项使得键盘焦点随着鼠标指针转移。这意味着，鼠标在哪个窗
口，哪个窗口就被激活。<code class="note">警告</code>: 使用菜单的时候，这并不完善，因为菜单命令总是针对最
顶上的窗口。

如果你在 ':' 行上 (或者 '/' 或 '?')，那么点击鼠标左键或右键只会把光标定位在
':' 行上 (如果 <a href="options.html#'mouse'">'mouse'</a> 包含 'c' 或 'a' 的话)。

任何情况下，点击鼠标中键可以用来粘贴当前的选择内容。


3.2 使用鼠标进行选择                                    <b class="vimtag"> <a name="gui-mouse-select">gui-mouse-select</a> </b>

鼠标可以用来开始选择。怎样开始决定于 <a href="options.html#'mousemodel'">'mousemodel'</a> 选项:
<a href="options.html#'mousemodel'">'mousemodel'</a> 是 "extend": 使用鼠标右键
<a href="options.html#'mousemodel'">'mousemodel'</a> 是 "popup":  使用鼠标左键，按住 Shift 键。

如果还没有开始选择，那么选择范围从以前的光标位置开始，到鼠标所点击的位置。如果
已经有选择，那么离鼠标最近的那端会被扩展。

如果 <a href="options.html#'selectmode'">'selectmode'</a> 包含 "mouse"，那么选择区处于选择模式。这意味着输入正常的文本
会替代选择内容。见  <a href="visual.html#Select-mode">Select-mode</a> 。不然，选择区处于可视模式。

双击可以选择单词，三击可以选择行，四击可以选择矩形块。

关于如何使用选择区，见  <a href="gui.html#gui-selections">gui-selections</a> 。


3.3 另一种鼠标的文本选择                                <b class="vimtag"> <a name="gui-mouse-modeless">gui-mouse-modeless</a> </b>
                                                        <b class="vimtag"> <a name="modeless-selection">modeless-selection</a> </b>
以下情形使用另一种选择:
- 在命令行模式下
- 在命令行窗口中，指针在另外一个窗口
- 在  <a href="message.html#hit-enter">hit-enter</a>  提示时
- 当前模式不在 <a href="options.html#'mouse'">'mouse'</a> 选项里
- 在 GUI 模式里，按住 CTRL 和 SHIFT 键
因为 Vim 就像没有选择区那样继续，而且没有和选择区相关联的模式，这种选择称为无
模式的选择。可以选择任何在 Vim 窗口里的文本。在文本开始的地方鼠标左键，拖到尾
部再释放。要扩展选择，在 <a href="options.html#'mousemodel'">'mousemodel'</a> 为 "extend" 的时候，使用鼠标右键；在
<a href="options.html#'mousemodel'">'mousemodel'</a> 为 "popup" 的时候，使用鼠标左键并按住 Shift 键。

选择区在选择文本滚动或者改变时被撤销。

在命令行上 <code class="keystroke">CTRL-Y</code> 可以用来复制选择区到剪贴板里。在插入模式下，可以使用
<code class="keystroke">CTRL-O</code> : <code class="keystroke">CTRL-Y</code> <code class="special">&lt;CR&gt;</code>。如果 <a href="options.html#'guioptions'">'guioptions'</a> 包含 a 或 A (X11 上的缺省值)，选择被自
动复制到 "* 寄存器里。

这时用鼠标中键就可以粘贴文本。非 X11 系统上，可以使用 <code class="keystroke">CTRL-R</code> +。


3.4 在状态行上使用鼠标                                  <b class="vimtag"> <a name="gui-mouse-status">gui-mouse-status</a> </b>

在 Vim 窗口下方的状态行上点击鼠标左键或者右键使得该窗口成为当前窗口。实际上，
这发生在鼠标释放的时候 (以区别拖动时的点击操作)。

使用鼠标左键，状态行可以上下拖动，从而调整上下窗口的大小。这样并不改变窗口焦
点。

这同样适用于垂直分割线: 点击把焦点给左侧的窗口，左右拖动使得两侧窗口更宽和更
窄。


3.5 各种鼠标点击                                        <b class="vimtag"> <a name="gui-mouse-various">gui-mouse-various</a> </b>

    <code class="special">&lt;S-LeftMouse&gt;</code>       正向搜索鼠标点击所在的单词。
                        当 <a href="options.html#'mousemodel'">'mousemodel'</a> 为 "popup" 时，该操作开始或者扩展选择
                        区。
    <code class="special">&lt;S-RightMouse&gt;</code>      反向搜索鼠标点击所在的单词。
    <code class="special">&lt;C-LeftMouse&gt;</code>       跳转到鼠标点击所在的标签上。
    <code class="special">&lt;C-RightMouse&gt;</code>      跳回上次标签跳转之前的位置 (同 "<code class="keystroke">CTRL-T</code>")


3.6 鼠标映射                                            <b class="vimtag"> <a name="gui-mouse-mapping">gui-mouse-mapping</a> </b>

鼠标事件，包括各种修饰符，可以被映射。例如: 
<code class="example">   :map &lt;S-LeftMouse&gt;     &lt;RightMouse&gt;</code>
<code class="example">   :map &lt;S-LeftDrag&gt;      &lt;RightDrag&gt;</code>
<code class="example">   :map &lt;S-LeftRelease&gt;   &lt;RightRelease&gt;</code>
<code class="example">   :map &lt;2-S-LeftMouse&gt;   &lt;2-RightMouse&gt;</code>
<code class="example">   :map &lt;2-S-LeftDrag&gt;    &lt;2-RightDrag&gt;</code>
<code class="example">   :map &lt;2-S-LeftRelease&gt; &lt;2-RightRelease&gt;</code>
<code class="example">   :map &lt;3-S-LeftMouse&gt;   &lt;3-RightMouse&gt;</code>
<code class="example">   :map &lt;3-S-LeftDrag&gt;    &lt;3-RightDrag&gt;</code>
<code class="example">   :map &lt;3-S-LeftRelease&gt; &lt;3-RightRelease&gt;</code>
<code class="example">   :map &lt;4-S-LeftMouse&gt;   &lt;4-RightMouse&gt;</code>
<code class="example">   :map &lt;4-S-LeftDrag&gt;    &lt;4-RightDrag&gt;</code>
<code class="example">   :map &lt;4-S-LeftRelease&gt; &lt;4-RightRelease&gt;</code>
这些映射使得选择的使用方式符合和 Motif 应用方式，Shift + 鼠标左键允许扩展可视
区域，而不是鼠标右键。

<code class="special">&lt;MouseMove&gt;</code> 可被映射，但要先打开 <a href="options.html#'mousemoveevent'">'mousemoveevent'</a>，此映射才可用。

带修饰符的鼠标映射不适用于无模式的选择。


3.7 拖放                                                        <b class="vimtag"> <a name="drag-n-drop">drag-n-drop</a> </b>

你可以拖放一个或多个文件到 Vim 窗口里，这样就如同执行了  <a href="windows.html#:drop">:drop</a>  命令那样打开那
些文件。可用 <b class="vimtag"> <a name="drop_file">drop_file</a> </b> 特性来检查是否支持拖放:  <code class="badlink">has('drop_file')</code> 。

如果这么做的时候你按住 Shift，Vim 改变到第一个放下的文件所在的目录。如果你按住
Ctrl，Vim 总会为文件分割出一个新的窗口。不然，只有当前缓冲区被改变的时候才会这
么做。

你可以在 Vim 里放下目录。这会为该目录启动探索器插件 (假设该插件被打开，不然你
会得到错误信息)。按住 Shift 这改变到该目录。

如果 Vim 碰巧在编辑命令行，放下文件的名字和目录会插入在光标位置上。这使得你在
任何 Ex 命令上都可以使用这些名字。特殊字符 (空格、制表、双引号、'|'、非
MS-Windows 系统上的反斜杠) 会被转义。

</section><hr class="doubleline" /><section class=inner>
<h4>4. 使用 GUI 进行选择                                    <b class="vimtag"> <a name="gui-selections">gui-selections</a> </b></h4>
                                                        <b class="vimtag"> <a name="quotestar">quotestar</a> </b>
你可以用鼠标进行选择 (见  <a href="gui.html#gui-mouse-select">gui-mouse-select</a> )，或者使用 Vim 的可视模式 (见
 <a href="visual.html#v">v</a> )。如果 <a href="options.html#'guioptions'">'guioptions'</a> 里包含 'a'，那么无论什么时候开始选择 (可视或选择模
式)，或者选择内容发生改变的时候，Vim 成为窗口系统的主选择区的拥有者
(MS-Windows 上使用  <a href="gui_w32.html#gui-clipboard">gui-clipboard</a> ；X11 上使用  <a href="gui_x11.html#x11-selection">x11-selection</a>  - 具体不管指哪
个，你应该据此理解这里所谓的主选择区)。

                                                        <b class="vimtag"> <a name="clipboard">clipboard</a> </b>
有一个特殊的寄存器可以存放选择内容，这就是 "* 寄存器。除非选择文本的相关信息发
生改变 (比如你在某处按了鼠标左键)，或者另一个应用想要粘贴选择文本。这时，文本
被放进 "* 寄存器。例如，剪切一行并使之成为当前的选择区/放到剪贴板上: 
<code class="example"></code>
<code class="example">        "*dd</code>
<code class="example"></code>
类似的，你想粘贴别的应用，比如通过点击鼠标中键，来选择内容的时候，该选择内容被
先放到 "* 寄存器上，然后再像其它寄存器那样被 <code class="badlink">'put'</code> (放置)。例如，要放置选择内
容 (剪贴板的内容)，可以这样: 
<code class="example"></code>
<code class="example">        "*p</code>
<code class="example"></code>
如果在 X11 中使用该寄存器，另见  <a href="gui_x11.html#x11-selection">x11-selection</a> 。那里也解释了相关的 "+ 寄存
器。

<code class="note">注意</code> 在从一个 Vim 粘贴文本到另一个不同的 Vim 实例的时候，选择类型 (字符、行、
或块) 也会被复制。对于其它应用，类型总是面向字符的。不过，如果通过
 <a href="gui_x11.html#x11-cut-buffer">x11-cut-buffer</a>  传输文本，选择类型 <code class="emphasis">总</code> 会丢失。

当 <a href="options.html#'clipboard'">'clipboard'</a> 选项包含了 "unnamed" 字符串的时候，无名寄存器和 "* 相同。这样，
你可以抽出和粘贴选择内容，而无须在这些命令前面附加 "*。

</section><hr class="doubleline" /><section class=inner>
<h4>5. 菜单                                                 <b class="vimtag"> <a name="menus">menus</a> </b></h4>
用户手册  <a href="usr_42.html#usr_42.txt">usr_42.txt</a>  有本节内容的简单介绍。


5.1 使用菜单                                            <b class="vimtag"> <a name="using-menus">using-menus</a> </b>

基本上，菜单和映射类似。你可以定义自己的菜单，多少都可以。
Vim  的长期用户不太用菜单。但是它的优势在你可以增加自己的菜单和菜单项。它们在
你记不住键序列的功能的时候很有用。

关于如何创建不同语言的菜单，见  <a href="mlang.html#:menutrans">:menutrans</a> 。
如果完全不想使用菜单，见  <a href="options.html#'go-M'">'go-M'</a> 。

                                                        <b class="vimtag"> <a name="menu.vim">menu.vim</a> </b>
缺省菜单从 "$VIMRUNTIME/menu.vim" 文件里读取。关于该路径从何而来，见
 <a href="starting.html#$VIMRUNTIME">$VIMRUNTIME</a> 。 你可以设置你自己的菜单。从缺省菜单开始是一个好主意。你可以增加
更多项目，或者如果完全不喜欢缺省菜单，从删除所有菜单开始  <a href="gui.html#:unmenu-all">:unmenu-all</a> 。你可以
把下行加到 .vimrc (不是 .gvimrc) 文件以禁止缺省的菜单的调入: 
<code class="example">        :let did_install_default_menus = 1</code>
如果你也不想载入 Syntax 菜单: 
<code class="example">        :let did_install_syntax_menu = 1</code>
Syntax 菜单第一项可以用来显示包含所有可用的文件类型的菜单 (载入需要不少时间)。
如果你确实想要启动时就同时得到所有文件类型，加入: 
<code class="example">                :let do_syntax_sel_menu = 1</code>
<code class="example"></code>
以下菜单项显示所有的可用配色方案，键盘映射和编译器设定:
<code class="section">        Edit &gt; Color Scheme </code>
<code class="section">        Edit &gt; Keymap </code>
<code class="section">        Tools &gt; Set Compiler </code>
不过，载入这些项目很花时间，因为它们要从 <a href="options.html#'runtimepath'">'runtimepath'</a> 的众目录中搜索所有的相
关文件。因此，它们被延后载入 (通过  <a href="autocmd.html#CursorHold">CursorHold</a>  事件)，你也可以手动载入之。
如果你希望系统启动时载入所有这些项目，加入: 
<code class="example">        :let do_no_lazyload_menus = 1</code>
<code class="example"></code>
<code class="note">注意</code> `:syntax on` 或 `:filetype on` 执行时或 .vimrc 文件载入时，会载入
menu.vim。这意味着 <a href="options.html#'encoding'">'encoding'</a> 选项和消息语言 (`:language messages`) 须在那之前
设置好 (如果你想有所改变的话)。

                                                        <b class="vimtag"> <a name="console-menus">console-menus</a> </b>
尽管本文档讨论 GUI，你其实也可以在控制台模式使用菜单。你需要自行载入
 <a href="gui.html#menu.vim">menu.vim</a> ，因为在那里，这一步不是自动进行的。你可以使用  <a href="gui.html#:emenu">:emenu</a>  命令和带
<a href="options.html#'wildmenu'">'wildmenu'</a> 的命令行补全，从而能像真实的菜单系统那样对菜单项进行访问。要做到这
一点，在你的 .vimrc 文件里放入如下命令: 
<code class="example">        :source $VIMRUNTIME/menu.vim</code>
<code class="example">        :set wildmenu</code>
<code class="example">        :set cpo-=&lt;</code>
<code class="example">        :set wcm=&lt;C-Z&gt;</code>
<code class="example">        :map &lt;F4&gt; :emenu &lt;C-Z&gt;</code>
按 <code class="special">&lt;F4&gt;</code> 会启动菜单。你可以用光标移动键来选择菜单项。按 <code class="special">&lt;Enter&gt;</code> 执行。如果你想
取消，按 <code class="special">&lt;Esc&gt;</code>。
本功能需要在编译时加入  <a href="various.html#+menu">+menu</a>  特性。

                                                        <b class="vimtag"> <a name="tear-off-menus">tear-off-menus</a> </b>
GTK+ 2 和 Motif 支持可撕下的菜单。它们是一种有粘性的菜单，亦即一直在屏幕上存在
的弹出式菜单。如果它们不能调整大小，可能你在 defaults 文件里使用了类似于
"Vim*geometry" 的设置。你应该使用 "Vim.geometry"。

至于 GTK+ 3，从 GTK+ 3.4 开始，可撕下的菜单被废弃了。因而如果 gvim 链接了 GTK+
3.4 或更新的版本，关闭其支持。

Win32 GUI 版本模拟 Motif 的可撕下菜单。实际上，Motif 用户很容易说出两者的区
别，但我们只希望能一样有用就够了。你也可以同时使用  <a href="gui_w32.html#:tearoff">:tearoff</a>  命令和
 <a href="gui.html#hidden-menus">hidden-menus</a> ，来创建不在主菜单栏出现的浮动菜单。


5.2 创建新的菜单                                        <b class="vimtag"> <a name="creating-menus">creating-menus</a> </b>

                                <b class="vimtag"> <a name=":me">:me</a> </b>  <b class="vimtag"> <a name=":menu">:menu</a> </b>   <b class="vimtag"> <a name=":noreme">:noreme</a> </b>  <b class="vimtag"> <a name=":noremenu">:noremenu</a> </b>
                                <b class="vimtag"> <a name="E330">E330</a> </b> <b class="vimtag"> <a name="E327">E327</a> </b> <b class="vimtag"> <a name="E331">E331</a> </b> <b class="vimtag"> <a name="E336">E336</a> </b> <b class="vimtag"> <a name="E333">E333</a> </b>
                                <b class="vimtag"> <a name="E328">E328</a> </b> <b class="vimtag"> <a name="E329">E329</a> </b> <b class="vimtag"> <a name="E337">E337</a> </b> <b class="vimtag"> <a name="E792">E792</a> </b>
要创建新的菜单项，使用 ":menu" 命令群。它们和 ":map" 命令群非常类似 (见
 <a href="map.html#map-modes">map-modes</a> )，但是第一个参数是菜单项名。形式为 '.' 分隔的菜单或子菜单的路径，
例如: 
<code class="example"></code>
<code class="example">   :menu File.Save  :w&lt;CR&gt;</code>
<code class="example">   :inoremenu File.Save  &lt;C-O&gt;:w&lt;CR&gt;</code>
<code class="example">   :menu Edit.Big\ Changes.Delete\ All\ Spaces  :%s/[ ^I]//g&lt;CR&gt;</code>
<code class="example"></code>
最后一项会在菜单栏里创建一个新的项目 "Edit"，在它上面按下鼠标键，会弹出菜单，
里面包含 "Big Changes" 一项，这又是包含 "Delete All Spaces" 项的一个子菜单。如
果选择了该项，执行操作。

要创建终端模式的菜单，用  <a href="gui.html#:tlmenu">:tlmenu</a>  而不是  <a href="gui.html#:tmenu">:tmenu</a> ，这和键盘映射不一致
( <a href="map.html#:tmap">:tmap</a> )。这是因为  <a href="gui.html#:tmenu">:tmenu</a>  已经用于定义菜单的工具提示了。见
 <a href="terminal.html#terminal-typing">terminal-typing</a> 。


菜单名里可用的特殊字符:

                                                        <b class="vimtag"> <a name="menu-shortcut">menu-shortcut</a> </b>
        &amp;       下一个字符是快捷键。确信该快捷键在 (子) 菜单里只使用一次。如果
                你想插入按本义出现的 "&amp;"，使用 "&amp;&amp;"。
                                                        <b class="vimtag"> <a name="menu-text">menu-text</a> </b>
        <code class="special">&lt;Tab&gt;</code>   分隔菜单名和右对齐的文本。这被用来显示等价的命令输入。为了方便
                起见，这里可以使用文本 "<code class="special">&lt;Tab&gt;</code>"。如果你使用真正的制表键，别忘了
                在前面加上反斜杠！
示例: 
<code class="example"></code>
<code class="example">   :amenu &amp;File.&amp;Open&lt;Tab&gt;:e  :browse e&lt;CR&gt;</code>
<code class="example"></code>
[按文本直接输入]
通过快捷键 "F" (按着 <code class="special">&lt;Alt&gt;</code> 键)，然后 "O"，就可以使用这个菜单。第二部分显示为
"Open     :e"。这里 ":e" 右对齐，而 "O" 有下划线，指示这是那个快捷键。

                                        <b class="vimtag"> <a name=":am">:am</a> </b>  <b class="vimtag"> <a name=":amenu">:amenu</a> </b>  <b class="vimtag"> <a name=":an">:an</a> </b>      <b class="vimtag"> <a name=":anoremenu">:anoremenu</a> </b>
":amenu" 命令可以用来一次定义除终端模式以外所有模式下的菜单项。要使得该命令正
确工作，在有些模式下需要自动插入一个字符:
<code class="section">        模式            前面插入        后面附加        </code>
        普通            不需要          不需要
        可视            <code class="special">&lt;C-C&gt;</code>           &lt;C-\&gt;<code class="special">&lt;C-G&gt;</code>
        插入            &lt;C-\&gt;<code class="special">&lt;C-O&gt;</code>
        命令行          <code class="special">&lt;C-C&gt;</code>           &lt;C-\&gt;<code class="special">&lt;C-G&gt;</code>
        等待操作符      <code class="special">&lt;C-C&gt;</code>           &lt;C-\&gt;<code class="special">&lt;C-G&gt;</code>

附加 <code class="keystroke">CTRL-\</code> <code class="keystroke">CTRL-G</code> 是为了能在置位 <a href="options.html#'insertmode'">'insertmode'</a> 的时候回到插入模式。
 <a href="intro.html#CTRL-\_CTRL-G">CTRL-\_CTRL-G</a> 

示例: 
<code class="example"></code>
<code class="example">   :amenu File.Next     :next^M</code>
<code class="example"></code>
等价于: 
<code class="example"></code>
<code class="example">   :nmenu File.Next     :next^M</code>
<code class="example">   :vmenu File.Next     ^C:next^M^\^G</code>
<code class="example">   :imenu File.Next     ^\^O:next^M</code>
<code class="example">   :cmenu File.Next     ^C:next^M^\^G</code>
<code class="example">   :omenu File.Next     ^C:next^M^\^G</code>
<code class="example"></code>
小心: 插入模式下，因为使用 <code class="keystroke">CTRL-O</code>，只对单个普通模式的命令有效。如果你有两个或
多个命令，必须使用 ":imenu" 命令。要在任何模式下插入文本，可以使用表达式寄存器
: 
<code class="example"></code>
<code class="example">   :amenu Insert.foobar   "='foobar'&lt;CR&gt;P</code>
<code class="example"></code>
特殊文本 <code class="special">&lt;Cmd&gt;</code> 启动 "命令菜单"，可以直接执行命令而不用切换模式。原来要用
":...<code class="special">&lt;CR&gt;</code>" 的地方，现在可用 "<code class="special">&lt;Cmd&gt;</code>...<code class="special">&lt;CR&gt;</code>" 代替。详见  <a href="map.html#%3CCmd%3E">&lt;Cmd&gt;</a> 。例如: 
<code class="example">        anoremenu File.Next &lt;Cmd&gt;next&lt;CR&gt;</code>
<code class="example"></code>
<code class="note">注意</code> 这里使用 <a href="options.html#'cpoptions'">'cpoptions'</a> 里的 '&lt;' 和 'k' 标志位 (如果包含了它们，<code class="special">&lt;&gt;</code> 形式和原
始的键码都不会被识别)。

<code class="note">注意</code> 命令行模式下的 <code class="special">&lt;Esc&gt;</code> 执行该命令，和映射的情况相同。这是 Vi 兼容的行为。使
用 <code class="keystroke">CTRL-C</code> 退出命令行模式。

                <b class="vimtag"> <a name=":nme">:nme</a> </b> <b class="vimtag"> <a name=":nmenu">:nmenu</a> </b>  <b class="vimtag"> <a name=":nnoreme">:nnoreme</a> </b> <b class="vimtag"> <a name=":nnoremenu">:nnoremenu</a> </b> <b class="vimtag"> <a name=":nunme">:nunme</a> </b> <b class="vimtag"> <a name=":nunmenu">:nunmenu</a> </b>
"n" 开始的菜单命令用于普通模式。  <a href="map.html#mapmode-n">mapmode-n</a> 

                <b class="vimtag"> <a name=":ome">:ome</a> </b> <b class="vimtag"> <a name=":omenu">:omenu</a> </b>  <b class="vimtag"> <a name=":onoreme">:onoreme</a> </b> <b class="vimtag"> <a name=":onoremenu">:onoremenu</a> </b> <b class="vimtag"> <a name=":ounme">:ounme</a> </b> <b class="vimtag"> <a name=":ounmenu">:ounmenu</a> </b>
"o" 开始的菜单命令用于操作符等待模式。  <a href="map.html#mapmode-o">mapmode-o</a> 

                <b class="vimtag"> <a name=":vme">:vme</a> </b> <b class="vimtag"> <a name=":vmenu">:vmenu</a> </b>  <b class="vimtag"> <a name=":vnoreme">:vnoreme</a> </b> <b class="vimtag"> <a name=":vnoremenu">:vnoremenu</a> </b> <b class="vimtag"> <a name=":vunme">:vunme</a> </b> <b class="vimtag"> <a name=":vunmenu">:vunmenu</a> </b>
"v" 开始的菜单命令用于可视模式。  <a href="map.html#mapmode-v">mapmode-v</a> 

                <b class="vimtag"> <a name=":xme">:xme</a> </b> <b class="vimtag"> <a name=":xmenu">:xmenu</a> </b>  <b class="vimtag"> <a name=":xnoreme">:xnoreme</a> </b> <b class="vimtag"> <a name=":xnoremenu">:xnoremenu</a> </b> <b class="vimtag"> <a name=":xunme">:xunme</a> </b> <b class="vimtag"> <a name=":xunmenu">:xunmenu</a> </b>
"x" 开始的菜单命令用于可视和选择模式。  <a href="map.html#mapmode-x">mapmode-x</a> 

                <b class="vimtag"> <a name=":sme">:sme</a> </b> <b class="vimtag"> <a name=":smenu">:smenu</a> </b>  <b class="vimtag"> <a name=":snoreme">:snoreme</a> </b> <b class="vimtag"> <a name=":snoremenu">:snoremenu</a> </b> <b class="vimtag"> <a name=":sunme">:sunme</a> </b> <b class="vimtag"> <a name=":sunmenu">:sunmenu</a> </b>
"s" 开始的菜单命令用于选择模式。  <a href="map.html#mapmode-s">mapmode-s</a> 

                <b class="vimtag"> <a name=":ime">:ime</a> </b> <b class="vimtag"> <a name=":imenu">:imenu</a> </b>  <b class="vimtag"> <a name=":inoreme">:inoreme</a> </b> <b class="vimtag"> <a name=":inoremenu">:inoremenu</a> </b> <b class="vimtag"> <a name=":iunme">:iunme</a> </b> <b class="vimtag"> <a name=":iunmenu">:iunmenu</a> </b>
"i" 开始的菜单命令用于插入模式。  <a href="map.html#mapmode-i">mapmode-i</a> 

                <b class="vimtag"> <a name=":cme">:cme</a> </b> <b class="vimtag"> <a name=":cmenu">:cmenu</a> </b>  <b class="vimtag"> <a name=":cnoreme">:cnoreme</a> </b> <b class="vimtag"> <a name=":cnoremenu">:cnoremenu</a> </b> <b class="vimtag"> <a name=":cunme">:cunme</a> </b> <b class="vimtag"> <a name=":cunmenu">:cunmenu</a> </b>
"c" 开始的菜单命令用于命令行模式。  <a href="map.html#mapmode-c">mapmode-c</a> 

                <b class="vimtag"> <a name=":tlm">:tlm</a> </b> <b class="vimtag"> <a name=":tlmenu">:tlmenu</a> </b> <b class="vimtag"> <a name=":tln">:tln</a> </b>     <b class="vimtag"> <a name=":tlnoremenu">:tlnoremenu</a> </b> <b class="vimtag"> <a name=":tlu">:tlu</a> </b>   <b class="vimtag"> <a name=":tlunmenu">:tlunmenu</a> </b>
"tl" 开始的菜单命令用于终端模式。  <a href="map.html#mapmode-t">mapmode-t</a> 

                                                <b class="vimtag"> <a name=":menu-%3Csilent%3E">:menu-&lt;silent&gt;</a> </b> <b class="vimtag"> <a name=":menu-silent">:menu-silent</a> </b>
要定义在命令行上不会回显的菜单，增加 "<code class="special">&lt;silent&gt;</code>" 作为第一个参数。例如: 
<code class="example">        :menu &lt;silent&gt; Settings.Ignore\ case  :set ic&lt;CR&gt;</code>
":set ic" 在使用该菜单时不会回显。但是执行命令时给出的消息仍然会。要把那些也去
掉，在执行命令时增加 ":silent": 
<code class="example">        :menu &lt;silent&gt; Search.Header :exe ":silent normal /Header\r"&lt;CR&gt;</code>
"<code class="special">&lt;silent&gt;</code>" 也可以出现 (但只能) 在 "<code class="special">&lt;special&gt;</code>" 或 "<code class="special">&lt;script&gt;</code>" 之后。

                                        <b class="vimtag"> <a name=":menu-%3Cspecial%3E">:menu-&lt;special&gt;</a> </b> <b class="vimtag"> <a name=":menu-special">:menu-special</a> </b>
定义菜单时，特殊键可用 <code class="special">&lt;&gt;</code> 记法，即使 <a href="options.html#'cpoptions'">'cpoptions'</a> 包含了 "&lt;" 标志位也没问题。可
用于不希望看到设置 <a href="options.html#'cpoptions'">'cpoptions'</a> 时出现副作用的场合。例如: 
<code class="example">        :menu &lt;special&gt; Search.Header /Header&lt;CR&gt;</code>
"<code class="special">&lt;special&gt;</code>" 必须是第一个参数或出现 (但只能) 在 "<code class="special">&lt;silent&gt;</code>" 或 "<code class="special">&lt;script&gt;</code>" 之后。

                                                <b class="vimtag"> <a name=":menu-%3Cscript%3E">:menu-&lt;script&gt;</a> </b> <b class="vimtag"> <a name=":menu-script">:menu-script</a> </b>
菜单的 "to" 部分会检查映射。如果你不想这样。使用 ":noremenu" 命令 (或者特定模
式下的类似命令)。
如果你需要局部于脚本的映射，增加 "<code class="special">&lt;script&gt;</code>" 作为 ":menu" 的第一个或紧跟在
"<code class="special">&lt;silent&gt;</code>" 或 "<code class="special">&lt;special&gt;</code>" 之后的参数。

                                                        <b class="vimtag"> <a name="menu-priority">menu-priority</a> </b>
你可以给菜单指定优先级。高优先级的菜单出现在右边。优先级在 ":menu" 命令之前以
数字形式给出。例如: 
<code class="example">        :80menu Buffer.next :bn&lt;CR&gt;</code>
<code class="example"></code>
缺省菜单有如下的优先级:
        File            10
        Edit            20
        Tools           40
        Syntax          50
        Buffers         60
        Window          70
        Help            9999

如果没有或者给出优先级为零，则使用 500。
弹出菜单不使用优先级。

如果系统支持 (Motif 和 GTK+)，Help 菜单会出现在菜单栏的最右侧。GTK+ 2 和 3 版
本已经不再继续这么做，因为该环境现在不再鼓励右对齐帮助菜单的界面设计风格。

你可以使用超过 9999 的优先级，使得菜单能出现在 Help 菜单之后。但这是不合标准的
做法，并不鼓励。最高的可能优先级大约是 32000。最低为 1。

                                                        <b class="vimtag"> <a name="sub-menu-priority">sub-menu-priority</a> </b>
相同的机制可以用来定位子菜单。这里，优先级用出现在菜单名前且用句号分隔的优先级
列表给出: 
<code class="example">        :menu 80.500 Buffer.next :bn&lt;CR&gt;</code>
子菜单优先级只有在不想该项目在正常的位置出现的时候才需要。例如，把某个子菜单放
在其它项目之前: 
<code class="example">        :menu 80.100 Buffer.first :brew&lt;CR&gt;</code>
也可以把子菜单放在其它项目之后，并期望使用缺省优先级的未来项目会加在它之前: 
<code class="example">        :menu 80.900 Buffer.last :blast&lt;CR&gt;</code>
如果不给出某个数字，使用缺省值 500: 
<code class="example">        :menu .900 myMenu.test :echo "text"&lt;CR&gt;</code>
菜单优先级只有在建立新菜单时才会用到。一旦已经存在 (比如，在别的模式下)，优先
级不会改变。因此，优先级只有在菜单第一次用到的时候才需要给出。弹出菜单是一个例
外。每个模式都有单独的菜单 (普通、操作符等待、可视、插入、命令行)。每个菜单里
的顺序可以不同。这和菜单栏的菜单不同，那里所有模式下都使用相同的顺序。
<code class="note">注意</code>: 现在，子菜单优先级不是在所有版本的 GUI 上都能工作。

                                                        <b class="vimtag"> <a name="menu-separator">menu-separator</a> </b> <b class="vimtag"> <a name="E332">E332</a> </b>
菜单项可以用一个特殊项目分隔，它在项目间插入一些空白。根据不同系统情况，有的显
示为一条线，有的显示为虚线。这些项目必须以 '-' 开始和结尾。两者之间的部分用来
给出一个独一无二的名字。和正常的项目一样，也可以使用优先级。例如: 
<code class="example">        :menu Example.item1     :做些事</code>
<code class="example">        :menu Example.-Sep-     :</code>
<code class="example">        :menu Example.item2     :做些别的事</code>
<code class="note">注意</code>分隔符也需要一个右手边的表达式。是什么没有关系，因为该项目永远不会选到。简
单点，用单个冒号就可以了。

                                                        <b class="vimtag"> <a name="gui-toolbar">gui-toolbar</a> </b>
目前，只有 Win32、Motif、GTK+ (X11) 和 Photon GUI 才有工具栏。适当的时候，在其
它 GUI 上也会开放这一功能。缺省的工具栏在 menu.vim 里定义。
工具栏显示与否有 <a href="options.html#'guioptions'">'guioptions'</a> 里的 'T' 字母控制。你可以同时有菜单和工具栏，或
者只用其中一项，甚至全不要。其外观通过 <a href="options.html#'toolbar'">'toolbar'</a> 选项控制。你可以在图像、文本
或者两者兼有之间选择。

                                                        <b class="vimtag"> <a name="toolbar-icon">toolbar-icon</a> </b>
工具栏定义为一个特殊的菜单，名为 ToolBar。它只有一层。Vim 如此解释该菜单里面的
项目:
1)  如果给出 "icon=" 参数，则使用该名字指定的文件。这个文件可以给出完整路径，
    或者只是基础名。如果是后者，在 <a href="options.html#'runtimepath'">'runtimepath'</a> 的 "bitmaps" 目录里搜索该文
    件，就像第三点那样。例如: 
<code class="example">        :amenu icon=/usr/local/pixmaps/foo_icon.xpm ToolBar.Foo :echo "Foo"&lt;CR&gt;</code>
<code class="example">        :amenu icon=FooIcon ToolBar.Foo :echo "Foo"&lt;CR&gt;</code>
    <code class="note">注意</code>在第一个例子里，需要包含扩展名，而第二个例子就不需要。
    如果该文件不能打开，则尝试下面的步骤。
    文件名里的空格必须用反斜杠转义。
    菜单优先级必须在 icon 参数 <code class="emphasis">之后</code> 给出: 
<code class="example">        :amenu icon=foo 1.42 ToolBar.Foo :echo "42!"&lt;CR&gt;</code>
2)  名为 'BuiltIn##' 的项目，其中 ## 是一个数字，用来指定 Vim 第 ## 个内建的位
    图。目前，有 31 个编号的位图，从 0 到 30。它们包含了多数常见的编辑操作
     <a href="gui.html#builtin-tools">builtin-tools</a> 。 
<code class="example">        :amenu ToolBar.BuiltIn22 :call SearchNext("back")&lt;CR&gt;</code>
3)  首先在 <a href="options.html#'runtimepath'">'runtimepath'</a> 里的 "bitmaps" 里搜索某个其它名字的项目。如果找到，该
    位图文件被用作工具按钮的图像。<code class="note">注意</code> 准确的文件名和具体的操作系统有关: 例
    如，Win32 上命令 
<code class="example">        :amenu ToolBar.Hello :echo "hello"&lt;CR&gt;</code>
    会找到文件 'hello.bmp'。在 GTK+/X11 上则是 'Hello.xpm'。在 GTK+ 2 上则按序
    查找文件 'Hello.png'、'Hello.xpm' 和 'Hello.bmp'，最先找到的被使用。
    MS-Windows 和 GTK+ 2 上位图被缩放到合适的按钮大小。在 MS-Windows 上，18 乘
    18 像素最好。
    在 MS-Windows 上，位图使用标准的调色板，使用 16 色。浅灰色的像素会被替换成
    窗口框架的颜色，而深灰色像素被换成窗口阴影的颜色。根据你的系统，也许可以使
    用比这个更多的颜色。
4)  如果该位图找不到，Vim 在内建名字的列表里查找该名字。因为每个内建按钮图像都
    有名字。
    因此，如果没有 open.bmp 的话，命令 
<code class="example">        :amenu ToolBar.Open :e</code>
    会显示内建的 "open a file" 按钮图标。
    在 menu.vim 里可以看到所有内建的名字。
5)  如果以上都不行，就显示一个可用的空白按钮。

                                                        <b class="vimtag"> <a name="builtin-tools">builtin-tools</a> </b>
<code class="section">号  名字                正常定义的操作  </code>
00  New                 打开新窗口
01  Open                浏览要在当前窗口打开的文件
02  Save                把缓冲区写回文件
03  Undo                撤销上次改变
04  Redo                重做上次撤销的改变
05  Cut                 删除选择的文本到剪贴板
06  Copy                复制选择的文本到剪贴板
07  Paste               从剪贴板粘贴文本
08  Print               打印当前缓冲区
09  Help                打开缓冲区，显示 Vim 的内建帮助
10  Find                开始搜索命令
11  SaveAll             把所有修改过的缓冲区写回文件
12  SaveSesn            把当前的情况写到会话文件
13  NewSesn             创建一个新的会话文件
14  LoadSesn            载入会话文件
15  RunScript           浏览文件，并作为 Vim 脚本执行
16  Replace             执行 substitute 命令，给出提示
17  WinClose            关闭当前窗口
18  WinMax              使得当前窗口使用尽量多行
19  WinMin              使得当前窗口使用尽量少行
20  WinSplit            分割当前窗口
21  Shell               启动外壳
22  FindPrev            反向再次搜索
23  FindNext            正向再次搜索
24  FindHelp            提示关键字，搜索相关帮助
25  Make                运行 make，跳到第一个错误
26  TagJump             跳转至光标所在的标签
27  RunCtags            运行 Ctags，为当前目录的文件构造标签
28  WinVSplit           垂直分割当前窗口
29  WinMaxWidth         使得当前窗口使用尽量多列
30  WinMinWidth         使得当前窗口使用尽量少列

                                        <b class="vimtag"> <a name="hidden-menus">hidden-menus</a> </b> <b class="vimtag"> <a name="win32-hidden-menus">win32-hidden-menus</a> </b>
在 Win32 和 GTK+ GUI 上，以 ']' 开始的菜单名使得该菜单不会在主菜单栏里出现。你
可以用  <a href="gui.html#:popup">:popup</a>  或者  <a href="gui_w32.html#:tearoff">:tearoff</a>  命令来显示之。

                                        <b class="vimtag"> <a name="window-toolbar">window-toolbar</a> </b> <b class="vimtag"> <a name="WinBar">WinBar</a> </b>
每个窗口都可有本地工具条。使用窗口的首行，这会减少一行文本可用的空间。工具条项
目须以 "WinBar" 开始。

只能用文本。使用 Unicode 可以用特殊字符来使项目看上去像个图标。

如果不能将全部项目安放于一行，则后面几个不能使用。工具条不会回绕。

<code class="note">备注</code> Vim 执行这些命令时可能处于任何模式。菜单应为普通模式定义，执行时也不
应改变当前模式。这样，如果当然窗口处于可视模式而菜单命令没有主动改变模式的话，
Vim 会继续留在可视模式。最好用  <a href="gui.html#:nnoremenu">:nnoremenu</a>  来避免副作用。

调试工具示例: 
<code class="example">        nnoremenu 1.10 WinBar.Step :Step&lt;CR&gt;</code>
<code class="example">        nnoremenu 1.20 WinBar.Next :Next&lt;CR&gt;</code>
<code class="example">        nnoremenu 1.30 WinBar.Finish :Finish&lt;CR&gt;</code>
<code class="example">        nnoremenu 1.40 WinBar.Cont :Continue&lt;CR&gt;</code>

窗口工具条使用 ToolbarLine 和 ToolbarButton 高亮组。

分割窗口时，并不在新窗口中复制窗口工具条。

                                                        <b class="vimtag"> <a name="popup-menu">popup-menu</a> </b>
在 Win32、GTK+、Motif 和 Photon GUI 上，可以定义特殊的 "PopUp" 菜单。如果
<a href="options.html#'mousemodel'">'mousemodel'</a> 设为 popup 或者 popup_setpos，这将是按下鼠标右键时显示的菜单。
示例: 
<code class="example">    nnoremenu 1.40 PopUp.&amp;Paste "+gP</code>
<code class="example">    menu PopUp</code>
<code class="example"></code>
<code class="example"></code>
5.3 显示菜单如何被映射                                  <b class="vimtag"> <a name="showing-menus">showing-menus</a> </b>

要看看现有的菜单是如何被映射的，在 menu 命令之后只使用一个参数 (就像你使用
":map" 命令那样)。如果指定的菜单是一个子菜单，那么所有该子树下面的层次结构都会
显示。如果 :menu 后面不给出任何参数，显示所在模式下的 <code class="emphasis">所有</code> 菜单项 (例如，命令
行模式下显示 :cmenu)。

该列表里，在右手边表达式之前显示的特殊字符的含义是:
*       菜单是通过 "nore" 形式定义的，以禁止重映射。
&amp;       菜单定义时包含了 "<code class="special">&lt;script&gt;</code>"，使得重映射只限于局部于脚本的映射。
s       菜单定义时包含了 "<code class="special">&lt;silent&gt;</code>"，使它触发时不会显示映射的内容。
-       菜单被屏蔽。

<code class="note">注意</code> 在 menu 命令里输入菜单名时，按 <code class="special">&lt;Tab&gt;</code> 可以用来补全菜单项目名。

菜单在显示时不能被修改。  <b class="vimtag"> <a name="E1310">E1310</a> </b>
一般这不会发生，除非比如说你在定时器回调中定义菜单，同时用户在显示菜单，并需要
显示  <a href="message.html#more-prompt">more-prompt</a> 。


5.4 执行菜单                                            <b class="vimtag"> <a name="execute-menus">execute-menus</a> </b>

                                                <b class="vimtag"> <a name=":em">:em</a> </b>  <b class="vimtag"> <a name=":emenu">:emenu</a> </b> <b class="vimtag"> <a name="E334">E334</a> </b> <b class="vimtag"> <a name="E335">E335</a> </b>
:<code class="special">[range]</code>em[enu] <code class="special">{menu}</code>          从命令行上执行 <code class="special">{menu}</code> 菜单。缺省执行普通模式的
                                命令。如果给出行范围 range，执行可视模式的菜
                                单。
                                如果从 <code class="special">&lt;c-o&gt;</code> 那里调用，执行插入模式命令。例如:

<code class="example">        :emenu File.Exit</code>
<code class="example"></code>
:<code class="special">[range]</code>em[enu] <code class="special">{mode}</code> <code class="special">{menu}</code>   同上，但执行 <code class="special">{mode}</code> 下的菜单:
                                    'n':  <a href="gui.html#:nmenu">:nmenu</a>   普通模式
                                    'v':  <a href="gui.html#:vmenu">:vmenu</a>   可视模式
                                    's':  <a href="gui.html#:smenu">:smenu</a>   选择模式
                                    'o':  <a href="gui.html#:omenu">:omenu</a>   操作符等待模式
                                    't':  <a href="gui.html#:tlmenu">:tlmenu</a>  终端模式
                                    'i':  <a href="gui.html#:imenu">:imenu</a>   插入模式
                                    'c':  <a href="gui.html#:cmenu">:cmenu</a>   命令行模式


如果控制台模式的 vim 编译时加入 WANT_MENU，你可以用 :emenu 来访问你已经习惯的
GUI 模式下有用的菜单项目。关于一个能用于此目的的选项，见 <a href="options.html#'wildmenu'">'wildmenu'</a>。例子又可
以见  <a href="gui.html#console-menus">console-menus</a> 。

如果使用行范围 range，并且选择的行和 '&lt;、'&gt; 指定的范围相同，则使用最近一次可视
选择的范围执行菜单命令。


5.5 删除菜单                                            <b class="vimtag"> <a name="delete-menus">delete-menus</a> </b>

                                                <b class="vimtag"> <a name=":unme">:unme</a> </b>  <b class="vimtag"> <a name=":unmenu">:unmenu</a> </b>
                                                <b class="vimtag"> <a name=":aun">:aun</a> </b>   <b class="vimtag"> <a name=":aunmenu">:aunmenu</a> </b>
要删除一个菜单项或者整个子菜单，使用 umenu 命令，类似于 unmap 命令。例如: 
<code class="example">    :unmenu! Edit.Paste</code>
<code class="example"></code>
会删除插入和命令行模式下的 Edit 菜单的 Paste 项。

<code class="note">注意</code> 在 umenu 命令里输入菜单名时，按 <code class="special">&lt;Tab&gt;</code> 可以用来补全菜单项目名。

要删除所有的菜单，可用:                         <b class="vimtag"> <a name=":unmenu-all">:unmenu-all</a> </b>  
<code class="example">        :unmenu *       " 删除普通和可视模式下的所有菜单</code>
<code class="example">        :unmenu! *      " 删除插入和命令行模式下的所有菜单</code>
<code class="example">        :aunmenu *      " 删除终端模式除外的所有模式下的所有菜单</code>
<code class="example">        :tlunmenu *     " 删除终端模式下的所有菜单</code>
<code class="example"></code>
如果你想去掉菜单栏: 
<code class="example">        :set guioptions-=m</code>
<code class="example"></code>
<code class="example"></code>
5.6 屏蔽菜单                                    <b class="vimtag"> <a name="disable-menus">disable-menus</a> </b>

                                                <b class="vimtag"> <a name=":menu-disable">:menu-disable</a> </b> <b class="vimtag"> <a name=":menu-enable">:menu-enable</a> </b>
如果你不想删除某个菜单，但想暂时屏蔽之，可以在 ":menu" 命令里使用 "enable" 或
"disable" 关键字。例如: 
<code class="example">        :menu disable &amp;File.&amp;Open\.\.\.</code>
<code class="example">        :amenu enable *</code>
<code class="example">        :amenu disable &amp;Tools.*</code>
<code class="example"></code>
和其它 menu 命令一样，该命令作用于指定的模式上。<code class="note">注意</code> 需要包含进来 "&amp;" 这样的字
符，以便找到经过翻译的名字。如果参数是 "*"，所有的菜单都受到影响。否则，给定的
菜单名和下面所有的子菜单 (如果存在的话) 都会受影响。


5.7 菜单示例                                    <b class="vimtag"> <a name="menu-examples">menu-examples</a> </b>

这里是一个如何用 menu 增加菜单项的例子。你可以为光标下的关键字增加菜单项。使用
寄存器 "z"。 
<code class="example"></code>
<code class="example">  :nmenu Words.Add\ Var         wb"zye:menu! Words.&lt;C-R&gt;z &lt;C-R&gt;z&lt;CR&gt;</code>
<code class="example">  :nmenu Words.Remove\ Var      wb"zye:unmenu! Words.&lt;C-R&gt;z&lt;CR&gt;</code>
<code class="example">  :vmenu Words.Add\ Var         "zy:menu! Words.&lt;C-R&gt;z &lt;C-R&gt;z &lt;CR&gt;</code>
<code class="example">  :vmenu Words.Remove\ Var      "zy:unmenu! Words.&lt;C-R&gt;z&lt;CR&gt;</code>
<code class="example">  :imenu Words.Add\ Var         &lt;Esc&gt;wb"zye:menu! Words.&lt;C-R&gt;z &lt;C-R&gt;z&lt;CR&gt;a</code>
<code class="example">  :imenu Words.Remove\ Var      &lt;Esc&gt;wb"zye:unmenu! Words.&lt;C-R&gt;z&lt;CR&gt;a</code>
<code class="example"></code>
(这里的右手边表达式使用 <code class="special">&lt;&gt;</code> 记法，你可以复制/粘贴这里的文本来测试这些映射，或者
把这些行加到你的 gvimrc 文件里；"<code class="special">&lt;C-R&gt;</code>" 是 <code class="keystroke">CTRL-R</code>，"<code class="special">&lt;CR&gt;</code>" 是 <code class="special">&lt;CR&gt;</code> 键。 <a href="intro.html#%3C%3E">&lt;&gt;</a> )

                                                        <b class="vimtag"> <a name="tooltips">tooltips</a> </b> <b class="vimtag"> <a name="menu-tips">menu-tips</a> </b>
5.8 工具提示 (Tooltips) 和菜单提示

见用户手册的  <a href="usr_42.html#42.4">42.4</a>  一节。

                                                        <b class="vimtag"> <a name=":tmenu">:tmenu</a> </b> <b class="vimtag"> <a name=":tm">:tm</a> </b>
:tm[enu] <code class="special">{menupath}</code> <code class="special">{rhs}</code>       为菜单或者工具定义提示。
                                <code class="notvi">{仅存在于 X11 和 Win32 GUI}</code>

:tm[enu] <code class="special">[menupath]</code>             列出菜单提示。<code class="notvi">{仅存在于 X11 和 Win32 GUI}</code>

                                                        <b class="vimtag"> <a name=":tunmenu">:tunmenu</a> </b> <b class="vimtag"> <a name=":tu">:tu</a> </b>
:tu[nmenu] <code class="special">{menupath}</code>           删除菜单或者工具的提示。
                                <code class="notvi">{仅存在于 X11 和 Win32 GUI}</code>

<code class="note">备注</code>: 要创建终端模式的菜单，使用  <a href="gui.html#:tlmenu">:tlmenu</a>  代替。

如果为某菜单项定义了提示，当鼠标移过该项目时，命令行区域会出现该提示，就像标准
Windows 菜单提示出现在状态栏那样。(除非 Vim 在命令行模式的时候，这时当然什么都
不会显示。)
如果为某工具栏项目定义了提示，当鼠标移过该按钮时，提示以通常的方式出现。要改变
它们的颜色，使用  <a href="syntax.html#hl-Tooltip">hl-Tooltip</a>  高亮组。

"提示" 可以为每个菜单项目定义。例如，在这样定义菜单项时: 
<code class="example">        :amenu MyMenu.Hello :echo "Hello"&lt;CR&gt;</code>
提示可以这样定义: 
<code class="example">        :tmenu MyMenu.Hello Displays a greeting.</code>
然后这样删除: 
<code class="example">        :tunmenu MyMenu.Hello</code>
<code class="example"></code>
现在，工具提示只有在 X11 和 Win32 GUI 上才支持。不过，在不远的将来，应该在其它
gui 平台上也会出现。

":tmenu" 菜单和其它菜单命令使用相同的参数。":tunmenu" 删除已存在的菜单提示，使
用方式和其它的 umenu 命令一样。

如果菜单项目不再合法，(即，在所有模式下，它的动作都被删除) Vim 为你删除菜单的
提示 (和菜单项)。这意味着 :aunmenu 彻底删除了菜单项目 - 你不需要再运行
:tunmenu 了。


5.9 弹出式菜单

在 Win32 和 GTK+ GUI 上，你可以在光标位置下生成一个菜单。这和 PopUp 菜单类似，
除了你可以弹出任何菜单树以外。

该命令只是为了后向兼容才存在，不鼓励使用。因为它的行为很奇特。

                                                        <b class="vimtag"> <a name=":popup">:popup</a> </b> <b class="vimtag"> <a name=":popu">:popu</a> </b>
:popu[p] <code class="special">{name}</code>                 弹出菜单 <code class="special">{name}</code>。菜单名必须有至少一项子项，但
                                不一定需要出现在菜单栏上 (见  <a href="gui.html#hidden-menus">hidden-menus</a> )。
                                <code class="notvi">{仅在 Win32 和 GTK GUI 或终端上有效}</code>

:popu[p]! <code class="special">{name}</code>                和上面类似，但使用鼠标指针所在的位置，而不是光
                                标位置。
                                在终端中，这是最后已知的位置，通常这是最后点击
                                或释放所在的位置 (和鼠标的移动不相干)。

示例: 
<code class="example">        :popup File</code>
会使得 "File" 菜单 (如果有的话) 出现在文本光标 (如果有 ! 则是鼠标指针) 的位置
上。 
<code class="example"></code>
<code class="example">        :amenu ]Toolbar.Make    :make&lt;CR&gt;</code>
<code class="example">        :popup ]Toolbar</code>
会创建一个弹出式菜单，该菜单并不存在于主菜单栏中。

<code class="note">注意</code> 在 GUI 上 :popup 命令立即返回，不等用户作出选择。终端中此命令则等待用户的
选择完成。

<code class="note">注意</code> ']' 开始的菜单不会显示。

</section><hr class="doubleline" /><section class=inner>
<h4>6. 字体</h4>
本小节描述字体相关的选项。

GUIFONT                                                 <b class="vimtag"> <a name="gui-font">gui-font</a> </b>

<a href="options.html#'guifont'">'guifont'</a> 是告诉 Vim 要使用什么字体的选项。它最简单的形式就是单个字体名。也可
以是逗号分隔的字体名列表。使用第一个合法的字体。如果没有合法的字体则报错。

支持 <a href="options.html#'guifontset'">'guifontset'</a> 的系统上 (X11)，如果 <a href="options.html#'guifontset'">'guifontset'</a> 不为空，不使用
<a href="options.html#'guifont'">'guifont'</a>。见  <a href="mbyte.html#xfontset">xfontset</a> 。

<code class="note">注意</code>: 对 GTK GUI 而言，非法的名字不会报错，总是选择并使用列表的首个单元。这是
因为 GTK GUI 并不去识别给出名字的字体，而是把它作为一个模式去在可选的字体中寻
找最佳的匹配字体，从这个意义上，匹配永远不会失败。非法的名字不要紧，因为除了
名字以外，还有一些其它的字体属性会帮助匹配的完成。

忽略逗号之后的空格。要在字体名里包含逗号，在它之前加上反斜杠。选项的设置需要
在空格和反斜杠之前加上额外的反斜杠。另见  <a href="options.html#option-backslash">option-backslash</a> 。比如: 
<code class="example">    :set guifont=Screen15,\ 7x13,font\\,with\\,commas</code>
会使 Vim 先寻找字体 "Screen15"，如果失败，再找 "7x13"，最后是
"font,with,commas"。

如果没有载入任何字体，Vim 保持原先的设置。如果给出空的字体列表，Vim 会试图使
用别的资源设置 (对 X 而言，会寻找 Vim.font 资源)，最后，选择总是可用的内建缺
省值 (X 使用的是 "7x13")。给出的字体必须是 "正常" 字体。 Vim 会试图找到相关的
粗体和斜体字体。

对于 Win32、GTK、Motif、Mac OS 和 Photon: 
<code class="example">    :set guifont=*</code>
给出字体请求对话框，从中可以选择你需要的字体。

字体名取决于不同的 GUI。 <a href="gui.html#setting-guifont">setting-guifont</a>  提供一个为不同系统设置 <a href="options.html#'guifont'">'guifont'</a> 的
方法。

GTK+ 2 和 3 GUI 的字体名看起来如此: 
<code class="example">    :set guifont=Andale\ Mono\ 11</code>
就这样多。不使用 XLFD (X 逻辑字体描述)。有报告说对中文而言，可以这样设: 
<code class="example">    if has("gui_gtk2")</code>
<code class="example">      set guifont=Bitstream\ Vera\ Sans\ Mono\ 12,Fixed\ 12</code>
<code class="example">      set guifontwide=Microsoft\ Yahei\ 12,WenQuanYi\ Zen\ Hei\ 12</code>
<code class="example">    endif</code>

(GTK+ 3 GUI 上把 gui_gtk2 换成 gui_gtk3)

Mac OSX 上，你可以这么用: 
<code class="example">    :set guifont=Monaco:h10</code>
<code class="example"></code>
等宽字体                                                <b class="vimtag"> <a name="E236">E236</a> </b>

<code class="note">注意</code> 字体必须等宽 (所有字符相同宽度)。GTK 是例外: 可以接受所有字体，不
过等宽字体的视觉效果最好。

要在 X11 上预览字体，可以使用 "xfontsel" 程序。"xlsfonts" 程序给出所有
可用的字体的列表。

对 Win32 GUI 而言                                       <b class="vimtag"> <a name="E244">E244</a> </b> <b class="vimtag"> <a name="E245">E245</a> </b>
- 字体名里接受如下选项 (选项间用 ':' 分隔):
        hXX - 高度为 XX (点 (point)，可以是浮点数)
        wXX - 宽度为 XX (点 (point)，可以是浮点数)
        WXX - 权重为 XX (见下面关于权重的<code class="note">备注</code>)
        b   - 粗体。等价于权重设为 700。
        i   - 斜体
        u   - 下划线
        s   - 突出
        cXX - 字符集 XX。合法的字符集是: ANSI、ARABIC、BALTIC、
              CHINESEBIG5、DEFAULT、EASTEUROPE、GB2312、GREEK、HANGEUL、
              HEBREW、JOHAB、MAC、OEM、RUSSIAN、SHIFTJIS、SYMBOL、THAI、
              TURKISH 和 VIETNAMESE。通常你会用 "cDEFAULT"。
        qXX - 质量值 XX。合法的质量名为: PROOF、DRAFT、ANTIALIASED、
              NONANTIALIASED、CLEARTYPE 和 DEFAULT。通常你会用 "qDEFAULT"。
              若干质量值在旧式的操作系统上不支持。
- '_' 可以代替空格，这样就无须用反斜杠转义空格。
例如: 
<code class="example">    :set guifont=courier_new:h12:w5:b:cRUSSIAN</code>
<code class="example">    :set guifont=Andale_Mono:h7.5:w4.5</code>
<code class="example"></code>
另见  <a href="gui_x11.html#font-sizes">font-sizes</a> 。

关于权重的 <code class="note">备注</code>: 字体通常提供不同的权重。Windows 上的 "正常" 权重值为 400，如
果未指定，这是寻找字体所使用的值。和名字比较，Windows 对字体的匹配更看重权重，
这意味着可能会用某个 Book 或 Medium 的字体变体而不是 Light 或 ExtraLight 的变
体。如果你觉得替代的字体权重太重了，可以显式设置低一点的权重值来抵消不合适替代
的影响。


GUIFONTWIDE                                             <b class="vimtag"> <a name="gui-fontwide">gui-fontwide</a> </b>

如果非空，<a href="options.html#'guifontwide'">'guifontwide'</a> 指定逗号分隔的用于双宽字符的字体列表。使用第一个能载入
的字体。

<code class="note">注意</code>: 这些字体必须使用 <a href="options.html#'guifont'">'guifont'</a> 指定的两倍宽度和相同的高度。如果不符合要求，
文本的绘制会不正确。

除了 GTK+ 之外的所有 GUI 版本:

<a href="options.html#'guifontwide'">'guifontwide'</a> 只有在 <a href="options.html#'encoding'">'encoding'</a> 设为 "utf-8" 并且 <a href="options.html#'guifontset'">'guifontset'</a> 为空或非法时才
使用。
如果设置 <a href="options.html#'guifont'">'guifont'</a> 并且从中找到合法的字体，但 <a href="options.html#'guifontwide'">'guifontwide'</a> 为空的时候，Vim 会
试图找到匹配的双宽的字体并设置 <a href="options.html#'guifontwide'">'guifontwide'</a> 为此值。

仅限于 GTK+ GUI:                        <b class="vimtag"> <a name="guifontwide_gtk">guifontwide_gtk</a> </b>

如果设置且合法，即使 <a href="options.html#'encoding'">'encoding'</a> 没有设为 "utf-8"，总为双宽字符使用
<a href="options.html#'guifontwide'">'guifontwide'</a> 。
Vim 不会试图自动寻找 <a href="options.html#'guifontwide'">'guifontwide'</a> 的合适的值。如果 <a href="options.html#'guifontwide'">'guifontwide'</a> 为空，
Pango/Xft 会选择 <a href="options.html#'guifont'">'guifont'</a> 里没有的字符的字体。所以，你完全可以不必设置
<a href="options.html#'guifontwide'">'guifontwide'</a>，除非你想改变 Pango/Xft 的选择。

仅限于 Windows +multibyte:              <b class="vimtag"> <a name="guifontwide_win_mbyte">guifontwide_win_mbyte</a> </b>

如果设置且合法，IME 使用 <a href="options.html#'guifontwide'">'guifontwide'</a> 代替 <a href="options.html#'guifont'">'guifont'</a>。

</section><hr class="doubleline" /><section class=inner>
<h4>7. 附加                                                 <b class="vimtag"> <a name="gui-extras">gui-extras</a> </b></h4>
这一节说明其它和 GUI 相关的特性。

- 在 GUI 上，按 escape 之后不需要等一秒，因为没有键码会以 <code class="special">&lt;Esc&gt;</code> 开始。

- 在 GUI 上，输入 ^V 紧跟一个特殊键会插入 "<code class="special">&lt;Key&gt;</code>"，因为所用到的内部字符串没有
  意义。也可以按下修饰符，得到 "<code class="special">&lt;Modifiers-Key&gt;</code>"。

- 在 GUI 上，修饰符 SHIFT、CTRL 和 ALT (或 META) 可以在映射里和特殊键或鼠标一
  起使用。
  例如 :map <code class="special">&lt;M-LeftDrag&gt;</code> <code class="special">&lt;LeftDrag&gt;</code>

- 在 GUI 上，若干普通键在映射等命令里可以带修饰符，它们是 <code class="special">&lt;Space&gt;</code>、<code class="special">&lt;Tab&gt;</code>、
  <code class="special">&lt;NL&gt;</code>、<code class="special">&lt;CR&gt;</code> 和 <code class="special">&lt;Esc&gt;</code>。

- 要在 Vim 脚本里检查是不是使用 GUI，你可以这么使用: 
<code class="example"></code>
<code class="example">        if has("gui_running")</code>
<code class="example">           echo "是的，我们有 GUI"</code>
<code class="example">        else</code>
<code class="example">           echo "无聊的老终端"</code>
<code class="example">        endif</code>
                                                <b class="vimtag"> <a name="setting-guifont">setting-guifont</a> </b>
- 如果你在多个系统上使用同一个 vimrc 文件，你可以这样设置不同类型的 GUI 专用的
  选项: 
<code class="example"></code>
<code class="example">        if has("gui_running")</code>
<code class="example">            if has("gui_gtk2")</code>
<code class="example">                :set guifont=Luxi\ Mono\ 12</code>
<code class="example">            elseif has("x11")</code>
<code class="example">                " Also for GTK 1</code>
<code class="example">                :set guifont=*-lucidatypewriter-medium-r-normal-*-*-180-*-*-m-*-*</code>
<code class="example">            elseif has("gui_win32")</code>
<code class="example">                :set guifont=Luxi_Mono:h12:cANSI</code>
<code class="example">            endif</code>
<code class="example">        endif</code>
<code class="example"></code>
MS Mincho 是一个推荐的日文字体。相关信息见: <a href="http://www.lexikan.com/mincho.htm">http://www.lexikan.com/mincho.htm</a>

</section><hr class="doubleline" /><section class=inner>
<h4>8. 外壳命令                                             <b class="vimtag"> <a name="gui-shell">gui-shell</a> </b></h4>
X11 GUI 上，外部命令在 gvim 窗口里执行。见  <a href="gui_x11.html#gui-pty">gui-pty</a> 。

警 告: 在 X11 GUI 上执行外部命令不总是可以的。"普通" 的命令，像 "ls"、"grep"、
"make" 大多数没问题。需要一个智能终端的命令，比如 "less" 和 "ispell" 就不行。
有的可能挂起，需要从另外一个终端杀死进程才能终止。所以，要小心一点。

Win32 GUI 上，外部命令在一个单独的窗口上执行。见  <a href="gui_w32.html#gui-shell-win32">gui-shell-win32</a> 。

 vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
</section>
</article>
<footer>
Generated by vim2html
</footer>
</body>
</html>
